//配置项目的路由
//引入Vue
import Vue from 'vue'
//引入路由器构造函数
import VueRouter from 'vue-router';
//安装路由功能
Vue.use(VueRouter);
//项目路由配置数组引入
import routes from './routes';

let push = VueRouter.prototype.push;
let replace = VueRouter.prototype.replace;
// 重写push  二次封装
// location:跳转方法传递第一个参数 {name:"search",params:{a:1}}
VueRouter.prototype.push = function (location, resolve, reject){
      //修改函数this指向:apply,call,bind
    //调用人家原有push方法且修改函数this为VueRouter类的实例
    //第一个参数：修改push方法的this，变为VueRouter类的实例
    //第二个....N参数：给push方法传递实参
    //apply与call区别?
    if (resolve && reject){
        push.call(this, location, resolve, reject);
    }else {
        push.call(this, location, ()=>{} , ()=>{});
    }
}

VueRouter.prototype.replace = function(location,resolve,reject){
  //判断在组件内部调用replace方法是否传递成功与失败回调
  if(resolve && reject){
      //apply:第一个参数修改replace函数this，变为VueRouter类实例
      replace.apply(this,[location,resolve,reject])
  }else{
      replace.apply(this,[location,()=>{},()=>{}]);
  }
}

//对外暴露VueRouter类的一个实例:路由器，一个路由器管理多个路由
export default new VueRouter({
      //设置路由模式:hash模式  history历史模式
      mode:'hash',
      //配置路由
      routes,
       //设置滚动条滚动行为---A->B,可以操作滚动条行为
    //当路由跳转的时候会执行一次
    scrollBehavior(to , from , savedPosition){
       //savedPosition:按返回|前进按钮对象
        //想跳转过去的路由对象   对象
        //从那个路由过来的      对象
        if(savedPosition){
           return savedPosition;savedPosition:可以去之前滚动条的位置对象 
        }else{
           return {y:0};
        }
    }
});
